package bszt.pdd;

import java.util.Scanner;

public class Code02 {

    /**
     * 题目描述
     * K小姐特别喜欢二进制字符串。有一天，博学的A先生在迁居时遇到了K小姐，他准备考考她。
     * A先生每次会给K小姐一个长度为n的二进制字符串s。他定义了一种新的子串d_i，作为十进制表示形式为s[i-1:i]的数字（可能有前导零）。A先生定义字符串的十进制值f(s)为所有有效的d_i的总和
     * 例如，对于字符串s=1101：
     * d_1=11, d_2= 10, d_3=01
     * 因此，
     * f(s) = 11 + 10 + 01 = 22
     * A先生允许K小姐每次可以交换字符串的任意两个相邻元素，最多可以进行k次操作。他问K小姐，在进行操作后，字符串的十进制值最小是多少。K小姐喜欢分享，于是她邀请你一起解决这个问题
     * <p></p>
     * 输入格式
     * 第一行包含一个整数t，表示测试用例的数量
     * 对于每组测试用例：
     * 第一行包含两个整数n和k，分别表示字符串的长度和允许的最大操作数
     * 第二行包含一个长度为n，仅由0和1组成的二进制字符串s
     * <p></p>
     * 输出格式
     * 对于每组测试用例，分别输出一行，每行一个整数，表示在最多可以进行k次操作后字符串的最小十进制值
     */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int i = 0; i < t; i++) {
            int n = sc.nextInt();
            int k = sc.nextInt();
            String s = sc.next();
            solve(n, k, s);
        }
    }

    public static void solve(int n, int k, String s) {
        StringBuilder sb = new StringBuilder(s);
        int idx0 = s.indexOf('1');
        int idx1 = s.lastIndexOf('1');

        if (idx1 == -1) return;
        while (k > 0 && idx1 < n - 1) {
            char tmp = sb.charAt(idx1);
            sb.replace(idx1, idx1 + 1, String.valueOf(sb.charAt(idx1 + 1)));
            sb.replace(idx1 + 1, idx1 + 2, String.valueOf(tmp));
            k--;
            idx1++;
        }

        if (idx0 == -1) return;
        while (k > 0 && idx0 > 0) {
            char tmp = sb.charAt(idx0);
            sb.replace(idx0, idx0 + 1, String.valueOf(sb.charAt(idx0 - 1)));
            sb.replace(idx0 - 1, idx0, String.valueOf(tmp));
            k--;
            idx0--;
        }

        int res = 0;
        for (int i = 0; i < n - 1; i++)
            res += Integer.parseInt(sb.substring(i, i + 2));
        System.out.println(res);
    }
}
